Amazon EC2からVPCエンドポイント経由で MongoDB Atlas に接続してみた
はじめに
Amazon EC2 (Amazon ECSなどでも可) からMongoDB Atlasへの接続方法には、以下の方法があります。
- インターネット経由
- VPC ピアリング経由
- Private Endpoint経由
接続方法
インターネット経由
インターネット経由では、EC2から直接インターネット経由でMongoDB Atlasに接続します。
セキュリティを強化するためには、MongoDB Atlas側でIP制限を設定する必要があります。
ただし、EC2がAuto Scalingを使用する場合、NAT Gatewayを設置してIPを固定する必要があります。
VPC ピアリング経由
VPC ピアリング経由は、下記の構成の通り、自身のアカウントのVPCと、MongoDB Atlas側で作成されるVPCを、ピアリング接続します。(構成図はAWSのサイトの紹介ページを引用)
構成図では、左側のVPCは自分のアカウント内のVPCで、右側がMongoDB AtlasのアカウントのVPCです。
VPC ピアリング経由のMongoDB Atlas への接続方法は、下記のブログで紹介されています。
MongoDB Atlas側でセキュリティグループを作成し、特定のセキュリティグループをアタッチしたEC2のみが接続できるように設定可能です。
Private Endpoint経由
Private Endpoint 経由は、下記の構成の通り、自身のアカウント内に作成したEC2からVPCエンドポイント経由で、MongoDB Atlasに接続します。(構成図はMongoDBのドキュメントを引用)
構成図では、左側のVPCは自分のアカウント内のVPCで、右側がMongoDB AtlasのアカウントのVPCです。
Private Endpointという言葉は、AWSの用語ではなく、MongoDB Atlasの用語になります。
構成図の右側にあるLoad Balancerは、MongoDB Atlas側で作成され、自身のAWSアカウントのVPCエンドポイントからLoad Balancerに対して、一方向の接続が確立されます。
セキュリティとしては、VPCエンドポイントのセキュリティグループで、特定のセキュリティグループをアタッチしたEC2のみがMongoDB Atlasに接続するよう設定できますので、比較的安全です。
今回は、自身のアカウント内のEC2から、Private Endpoints経由で、MongoDB Atlasに接続する方法を記載します。
料金については、こちら
事前準備
- AWSアカウントでEC2を作成済み
- SSH接続、もしくはセッションマネージャが利用できるようにする
- Atlasのアカウントを作成済み
- 作成していない場合、下記ブログをご参考にしてください
DBを作成する
まず、DBを作成します。
高度な設定でDBを作成するため、[advanced configuration options.]をクリックします。
安く済ませたいので、下記以外は、デフォルト設定で作成します。最低価格の$0.10/hour
で作成できているか確認しましょう。
- Proveider
- AWS
- Region
- Tokyo (ap-northeast-1)
- Cluster Tier
- M10 (2 GB RAM, 10 GB Storage)
- Auto-scale
- 無効
- Turn on Cloud Backup (M2 and up)
- 無効
- 無効
[Create Cluster]をクリックすると、Security Quickstartに遷移します。遷移時点でDBは作成されています。
Private Endpointを作成
ユーザー名とパスワードを設定し、[Private Endpoint]の[Configure in New Tab]をクリックします
別タブで、[Network Access]が開かれます。[Add Private Endpoint]をクリックします
AWSを選択します
Tokyoリージョンを選択します。
EC2が起動しているVPCとサブネットを指定します。画面に記載されている通り、Atlas Endpoints Serviceが作成されるまで3~4分ほど待ちます。
記載しているコマンドをローカルもしくは、CloudShellで実行し、VPCエンドポイントを作成します。
$ aws ec2 create-vpc-endpoint --vpc-id vpc-xxxxxxxxxxxxxxxx --region ap-northeast-1 --service-name com.amazonaws.vpce.ap-northeast-1.vpce-svc-xxxxxxxxxxxx --vpc-endpoint-type Interface --subnet-ids subnet-xxxxxxxxxxxxxxxxxxx
コマンド実行後、作成されたVPC Endpoints IDを入力し[create]をクリックすると完了です。
VPCエンドポイント用のセキュリティグループを作成
EC2のセキュリティグループからのインバウンドを、すべてのTCPに対してのみ、許可する設定で作成します。
作成したセキュリティグループは、VPCエンドポイントにアタッチします。
EC2からMongoDB Atlasにアクセスする
DBダッシュボードから[Connect]をクリックします。
下記を設定し、[Choose a connection method]をクリックします。
- Choose connection type
- Private Endpoint を選択
- Choose private endpoint
- 先程作成したVPC Endpoints IDを選択
[Shell]を選択します
Amazon Linux 2の場合、下記のコマンドで、mongoshをインストールし、EC2からMongoDBに接続できます。
セッションマネージャでEC2に接続し、下記コマンドを実行します
$ cd /home/ssm-user/ $ wget https://downloads.mongodb.com/compass/mongosh-1.8.0-linux-x64.tgz 2023-04-18 07:40:34 (172 MB/s) - ‘mongosh-1.8.0-linux-x64.tgz’ saved [61098948/61098948] $ tar xvfz mongosh-1.8.0-linux-x64.tgz $ cd mongosh-1.8.0-linux-x64 $ chmod +x bin/mongosh $ sudo cp bin/mongosh /usr/local/bin/ $ sudo cp bin/mongosh_crypt_v1.so /usr/local/lib/ $ mongosh "mongodb+srv://cluster0-pl-0.itg2z.mongodb.net/myFirstDatabase" --apiVersion 1 --username admin Enter password: ********** Current Mongosh Log ID: xxxxxxxxxxxxxxxxxxxxxxxxxxx Connecting to: mongodb+srv://<credentials>@cluster0-pl-0.itg2z.mongodb.net/myFirstDatabase?appName=mongosh+1.8.0 Using MongoDB: 6.0.5 (API Version 1) Using Mongosh: 1.8.0 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ Atlas atlas-yxeifm-shard-0 [primary] myFirstDatabase> show databases admin 264.00 KiB config 220.00 KiB local 516.00 KiB
EC2からMongoDB Atlasに接続し、DB一覧を確認できました。
コマンドは下記のドキュメントに記載されていました
参考
最後に
Private Endpoint経由でEC2からMongoDB Atlasに接続することができました。
MongoDB Atlasのコンソール上で、使用するべきコマンドが表示されており、それに従えばよいので、比較的簡単に作成することができます